Contents

import pandas as pd
import geopandas as gpd
import plotly.graph_objects as go
import warnings
from shapely.errors import ShapelyDeprecationWarning

# Suppress specific warnings
warnings.filterwarnings("ignore", category=ShapelyDeprecationWarning)

# Read shapefiles and data
gemeenten_shapefile = 'gadm41_NLD_1.shp'
gdf = gpd.read_file(gemeenten_shapefile)
gdf = gdf[~gdf['NAME_1'].isin(['Zeeuwse meren', 'IJsselmeer'])]
gdf.loc[gdf['NAME_1'] == 'Fryslân', 'NAME_1'] = 'Friesland'
gdf.loc[gdf['NAME_1'] == 'NA', 'NAME_1'] = 'Zuid-Holland'
dataset = pd.read_csv('inkomen_van_personen__persoonskenmerken.csv', sep=',', thousands='.')[0:12]
dataset['Mediaan persoonlijk inkomen'] = dataset['Mediaan persoonlijk inkomen'].str.replace(',', '.').astype(float)

merged = gdf.merge(dataset, how='left', left_on='NAME_1', right_on='Regio\'s')

# Define the GeoJSON
counties_geojson = merged.__geo_interface__

# Create Plotly figure
fig = go.Figure(go.Choroplethmapbox(
    geojson=counties_geojson,
    locations=merged.index,
    z=merged['Mediaan persoonlijk inkomen'],
    colorscale='reds',
    zmin=merged['Mediaan persoonlijk inkomen'].min(),
    zmax=merged['Mediaan persoonlijk inkomen'].max(),
    marker_opacity=0.5,
    marker_line_width=0,
    hovertemplate='<b>%{properties.NAME_1}</b><br>' +
                  'Mediaan inkomen: %{z:.2f} (x1,000€) <extra></extra>',  # Custom hover information
))

# Update layout
fig.update_layout(
    mapbox_style="carto-positron",
    mapbox_zoom=5,
    mapbox_center={"lat": 52.1326, "lon": 5.2913},
    margin={"r": 0, "t": 30, "l": 0, "b": 0},  # Adjust top margin for title
    title='Mediaan persoonlijk inkomen in Nederlandse provincies ',  # Title of the plot
    coloraxis_colorbar=dict(
        title='Color bar title',  # Color bar title
        ticksuffix=' €',  # Suffix for color bar ticks
    )
)

# Show the figure
fig.show()